package cn.qingyun.gis.modules.baogan.mapper;

import cn.qingyun.gis.modules.baogan.dto.ParentPologon;
import cn.qingyun.gis.modules.baogan.dto.VisitTotalDto;
import cn.qingyun.gis.modules.baogan.entity.MicroStreetData;
import cn.qingyun.gis.modules.baogan.vo.PoiScenarioTypeResponse;
import cn.qingyun.gis.modules.baogan.vo.ScenarioCountResponse;
import cn.qingyun.gis.modules.baogan.vo.request.*;
import cn.qingyun.gis.modules.baogan.vo.response.DataResponse;
import cn.qingyun.gis.modules.baogan.vo.response.MicroStreetAuditLogResp;
import cn.qingyun.gis.modules.baogan.vo.response.PerimeterDataResp;
import cn.qingyun.gis.modules.baogan.vo.response.PolygonDetailRes;
import cn.qingyun.gis.modules.baogan.vo.response.StreetDataRes;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

@Mapper
@DS("scenes_offensive")
public interface MicroStreetDataMapper extends BaseMapper<MicroStreetData> {

    Page<PoiScenarioTypeResponse> selectSceneList(Page<PoiScenarioTypeResponse> page, @Param("code") String code, @Param("type") String type, @Param("level") Integer level, @Param("flag") Integer flag);

    List<PoiScenarioTypeResponse> selectCircleDrawingData(@Param("id") String id);

    List<ScenarioCountResponse> selectLWCount(@Param("code") String code, @Param("flag") Integer flag, @Param("level") Integer level);

    List<MicroStreetData> selectAreaList(@Param("microGridCode") String microGridCode);

    Integer selectStreetBuildingTotal(@Param("microGridCode") String microGridCode, @Param("id") String id, @Param("types") List<String> types);

    Integer selectStreetEnterpriseTotal(@Param("microGridCode") String microGridCode, @Param("id") String id, @Param("types") List<String> types);

    VisitTotalDto selectStreetVisitTotal(@Param("microGridCode") String microGridCode, @Param("id") String id, @Param("types") List<String> types);

    PolygonDetailRes selectStreetDetail(@Param("microGridCode") String microGridCode, @Param("id") String id);

    Double getAreaById(String id);

    Integer getBuildCount(String id);

    Integer getCompanyCount(String id);

    /**
     * 查询待审核的面数据
     *
     * @param respPage
     * @param request
     * @return
     */
    Page<MicroStreetAuditLogResp> selectAuditData(Page<MicroStreetAuditLogResp> respPage, @Param("request") PendingAuditRequest request, @Param("level")Integer level);

    /**
     * 周边查询--面数据
     * @param request
     * @return
     */
    List<PerimeterDataResp> selectPerimeterStreetData(@Param("request") PerimeterRequest request, @Param("code") String code,@Param("level") Integer level);

    /**
     * 修改wkt
     * @param streetData
     */
    void updateWkt(@Param("data") MicroStreetData streetData);

    MicroStreetData MicroStreetData(@Param("id") String id);

    boolean saveBoundary(@Param("data") MicroStreetData data);

    MicroStreetData selectOneById(@Param("microGridCode") String microGridCode, @Param("id") String id);

    MicroStreetData selectParentByWkt(@Param("wkt") String wkt);

    ParentPologon selectParentPologon(@Param("wkt") String wkt);

    List<String> selectPointInPolygon(@Param("wkt") String wkt);

    void updateParentIdById(@Param("ids") List<String> id, @Param("parentId") String parentId);

    void updateParentIdNullById(@Param("pointIds") List<String> pointIds, @Param("id") String id);

    // 根据面查询有效商街数量
    Integer getStreetCount(@Param("request") AoiBaseInfoGetRequest request);

    /**
     * 查询微网格下的数据（点、面）
     * @param request
     * @param wkt
     * @return
     */
    List<DataResponse> selectDataResponseList(@Param("request")MicroDataRequest request,@Param("wkt") String wkt);

    List<StreetDataRes> selectDateList(@Param("rtLon") BigDecimal rtLon, @Param("rtLat") BigDecimal rtLat, @Param("lbLon") BigDecimal lbLon, @Param("lbLat") BigDecimal lbLat, @Param("text") String text, @Param("types") List<String> types);

    /**
     * 查询重复的面数据信息
     * @param request
     * @return
     */
    List<DataResponse> selectRepeatDataList(@Param("request") RepeatPolygonRequest request);

    MicroStreetData getMicroStreetDataById(@Param("id") String id);
}
